// 用户相关路由
const express = require('express')
const router = express.Router()
const UserModel = require('../db/models/UserModel')
const { RES_CODE } = require('../utils/contants')
const md5 = require('md5')
const formidable = require('formidable')
const path = require('path')

// 获取用户列表
router.get('/user/:page/:limit', async (req, res) => {
    const { page, limit } = req.params
    try {
        // 查询数据库
        const users = await UserModel.find({ username: { $ne: 'admin' } })
            .skip((page - 1) * limit)
            .limit(limit)
        const total = await UserModel.countDocuments({ username: { $ne: 'admin' } })
        res.json({
            code: RES_CODE.SUCCESS,
            data: {
                users,
                total
            },
            message: '获取用户列表成功'
        })
    } catch (err) {
        res.statusCode = 500
        res.json({
            code: RES_CODE.ERROR,
            msg: '服务器错误'
        })
    }
})

// 获取单个用户
router.get('/user', async (req, res) => {
    // 获取 id 参数
    let { id } = req.query
    try {
        // 获取用户信息
        let user = await UserModel.findById({ _id: id })
        console.log(user)
        res.json({
            code: RES_CODE.SUCCESS,
            data: user,
            msg: '获取用户成功'
        })
    } catch (err) {
        console.log(err)
        res.send({
            code: RES_CODE.ERROR,
            msg: '获取失败, 服务端异常'
        })
    }
})

// 添加用户
router.post('/user', async (req, res) => {
    // 创建处理带文件的表单请求的对象
    const form = formidable({
        uploadDir: path.resolve(__dirname, '../public/upload'), // 文件上传目录
        keepExtensions: true // 保留后缀
    })
    // 处理表单请求
    form.parse(req, async (err, fields, files) => {
        if (err) {
            return res.json({
                code: RES_CODE.ERROR,
                msg: '图片上传失败'
            })
        }
        // 获取用户名和密码
        const { username, pwd } = fields
        // 判断数据是否有
        if (!username || !pwd) {
            return res.json({
                code: RES_CODE.ILLEGAL_ARGUMENT,
                msg: '用户名或密码不能为空'
            })
        }
        try {
            // 查找数据库中有没有该用户
            let user = await UserModel.findOne({ username })
            if (user) {
                return res.json({
                    code: RES_CODE.ERROR,
                    msg: '用户名已存在'
                })
            }
            // 判断上传图片的访问路径
            const { profileFile } = files
            const filename = profileFile.newFilename
            const profile = '/upload/' + filename
            // 创建用户对象
            user = await UserModel.create({
                username,
                pwd: md5(pwd),
                profile
            })
            // 返回成功
            res.json({
                code: RES_CODE.SUCCESS,
                data: user,
                msg: '添加用户成功'
            })
        } catch (err) {
            res.statusCode = 500
            res.json({
                code: RES_CODE.ERROR,
                msg: '添加失败，服务器错误'
            })
        }
    })
})

// 更新用户信息
router.put('/user', async (req, res) => {
    // 创建处理带文件的表单请求的对象
    const form = formidable({
        uploadDir: path.resolve(__dirname, '../public/upload'), // 文件上传目录
        keepExtensions: true // 保留后缀
    })
    // 处理表单请求
    form.parse(req, async (err, fields, files) => {
        if (err) {
            return res.json({
                code: RES_CODE.ERROR,
                msg: '图片上传失败'
            })
        }
        // 获取用户名和密码
        const { _id, username, pwd } = fields
        console.log(_id, username, pwd)
        const { profileFile } = files
        const filename = profileFile.newFilename
        const profile = '/upload/' + filename
        try {
            // 查找数据库中有没有该用户
            let user = await UserModel.findOne({ username })
            if (user) {
                return res.json({
                    code: RES_CODE.ERROR,
                    msg: '用户已存在'
                })
            }
            // 更新用户信息
            await UserModel.updateOne({ _id }, { username, pwd, profile })
            // 返回成功
            res.json({
                code: RES_CODE.SUCCESS,
                msg: '更新用户信息成功'
            })
        } catch (err) {
            return res.json({
                code: RES_CODE.ERROR,
                msg: '更新用户信息失败'
            })
        }
    })
})

// 删除用户
router.delete('/user/:id', async (req, res) => {
    const { id } = req.params
    console.log(id)
    try {
        // 查找数据库中有没有该用户
        let user = await UserModel.findOne({ _id: id })
        if (!user) {
            return res.json({
                code: RES_CODE.ERROR,
                msg: '用户不存在'
            })
        }
        // 删除用户
        await UserModel.deleteOne({ _id: id })
        // 返回成功
        res.json({
            code: RES_CODE.SUCCESS,
            msg: '删除用户成功'
        })
    } catch (err) {
        return res.json({
            code: RES_CODE.ERROR,
            msg: '删除用户失败'
        })
    }
})
// 暴露
module.exports = router
